#ifndef CJGPROCESSSCHEDULE_H
#define CJGPROCESSSCHEDULE_H

#include "cjgboxset.h"

#include <QDateTime>
#include <QString>
class CJgProcessSchedule
{
public:
    qlonglong miOrderProcessId;	//对应的订单工序id		order_process_id
    QVector<int> mPosCanDo;	//工人效率排序，里面是工位，对应workers 字段里面用逗号分隔,这是排产核心输出给别的模块看的数据，每次更新数据时重新算一遍
    QVector<int> misHaveDonePos;//当前工序做过的工位，库空不清除，需要用到历史值
    QVector<int> misWorkingPos;//正在做的工位，不需要用到历史值,给监控界面查看
    CJgBoxSet mBoxesInLib;//在库的筐集合
    CJgBoxSet mBoxesInWork;//生产状态的筐集合
    int mPlanHourTarget;//计划小时任务数，启动订单是赋值
    int mNowHourTarget;//当前小时任务数，，在数据库里用于显示
    //qlonglong mSuggestID;//建议记录的id，需要人工处理时生成，0表示没有建议
    //CJgSuggest * pSuggest;//建议记录对象，如果没有nullptr
    //todo 把建议对象放在排产数据里面，不需要id
    int mIncDecFlag;//加减人标记，1加人0减人-1，0不变
    QDateTime mPosChangeStart;//开始进行加人计划的时间，在这个时间30分钟内按照建议的工位进行加人，在这个时间后自由抢做
    QSet<int> mPlanPositions;//加人或减人计划的工位，如果没有，则下次再进行判断，判断的依据是技能、对方当前工序、对方当前工序的剩余时间
    bool mbNGFlag;//工序是否需要参与排产的标志，在库量达到的或加急的或刚刚回库的强制标记为需要排产
    bool mbUrgentFlag;//加急工序标志，可整单加急也可单工序加急
    bool mbValidFlag;//记录有效性的标志，完成的订单工序设置为false
    bool mbHoldFlag;//暂停标志，需要从数据库同步
    QString mRemark;//备注用于显示
    QSet<int> misWhiteList;//工位白名单，优先发送
    QSet<int> misBlackList;//工位黑名单，不允许发送
    bool mbAllUnDoInLib;//所有未做筐都在库或已经扫描到
    bool mbAllUnDoNotReady;//所有未做的筐没有准备好，不是已经可以做也不是上道工序在产或回库，不需要每次使用前判断，在获取数据后填充一次就够了

    CJgProcessSchedule();
};

#endif // CJGPROCESSSCHEDULE_H
